//
// Created by 刘振舟 on 2024/6/29.
//

#ifndef GRAPHTHEORY_DEQUE_H
#define GRAPHTHEORY_DEQUE_H

#include <stdlib.h>

// 定义双端队列节点结构体
typedef struct DequeNode {
    void *data;              // 数据指针
    struct DequeNode *next;  // 后继指针
    struct DequeNode *prev;  // 前驱指针
} DequeNode;

// 定义双端队列结构体
typedef struct {
    DequeNode *front;  // 头指针
    DequeNode *back;   // 尾指针
    size_t size;       // 当前元素个数
} Deque;

// 初始化双端队列
void deque_init(Deque *deque);

// 销毁双端队列
void deque_destroy(Deque *deque);

// 获取双端队列中元素个数
size_t deque_size(const Deque *deque);

// 判断双端队列是否为空
int deque_empty(const Deque *deque);

// 从头部入队
void deque_push_front(Deque *deque, void *data);

// 从头部出队
void *deque_pop_front(Deque *deque);

// 从尾部入队
void deque_push_back(Deque *deque, void *data);

// 从尾部出队
void *deque_pop_back(Deque *deque);

#endif //GRAPHTHEORY_DEQUE_H
